# ================= 可修改部分 =================
TARGET      := myapp
CXX         := g++
CXXFLAGS    := -std=c++17 -Wall -Wextra -pedantic -Iinclude
LDFLAGS     := -lm          # 需要链接的库
SRCDIR      := src
OBJDIR      := build
SOURCES     := $(wildcard $(SRCDIR)/*.cpp)
OBJECTS     := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
DEPENDS     := $(OBJECTS:.o=.d)
# =============================================

# 默认目标
all: $(TARGET)

# 链接可执行文件
$(TARGET): $(OBJECTS)
	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)

# 编译 .o 并同时生成 .d 依赖文件
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp | $(OBJDIR)
	$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@

# 自动创建 build 目录
$(OBJDIR):
	mkdir -p $(OBJDIR)

# 包含依赖文件（若存在），确保头文件改动也能触发重编
-include $(DEPENDS)

# 清理
clean:
	rm -rf $(OBJDIR) $(TARGET)

.PHONY: all clean